The use of flash devices, such as Solid State Drives (SSDs) to store key-value databases is a relatively recent innovation. Although not as fast as Dynamic Random Access Memory (RAM), SSDs are typically considerably faster than hard disk drives, while offering capacities that rival or exceed traditional hard disk drives. As prices for SSDs continue to drop, SSDs are more and more becoming the devices of choice for storing databases.
Databases often use a key-value interface. That is, a query of the database provides a key, and the database returns the corresponding value. This interface differs from the more conventional file-system and block-system interfaces, in which a query from an application specifies a particular file or block, and which is then mapped to a physical block address on the device. Using an SSD as a database involves replacing the convention interface with a key-value interface.
But while the application may provide a key and receive a value in return, the SSD treats all input/output (I/O) commands the same way, regardless of the particular conditions on the SSD. Nor does the application have any information that might suggest the best way for the application to utilize the SSD. Put another way, the application and the SSD have no ability to optimize their operations given overall conditions.
A need remains for a way to improve the performance of large databases and to balance the two objectives of minimizing latency and keeping cost down.